# -*- coding: utf-8 -*-
"""
Created on Mon Nov 11 10:43:31 2024

@author: zrk
"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 设置一个随机数生成种子，保证实验可复现
np.random.seed(42)

# 生成一个符合正太分布的数组：
# 第一个参数50代表均值，第二个数10代表标准差为10
# 第三个数100代表生产100个数的数组
arr = np.random.normal(50, 10, 100)
outlier = [100, 150, -10]

# 将正常值和异常值连接起来
all_num = np.concatenate([arr, outlier])

data = {
    'value': all_num
}
df = pd.DataFrame(data)

# 生成正态分布数据
mu = 50  # 均值
sigma = 10  # 标准差

# 异常值的判断阈值
lower = mu - 3 * sigma
upper = mu + 3 * sigma

# 切片筛选出异常值
df_outlier = df[(df['value'] > upper) | (df['value'] < lower)]

# 通过异常值的index，可以删除
df_clear = df.drop(df_outlier.index)


x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
y = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp(- (x - mu)**2 / (2 * sigma**2))

# 绘制图形
plt.plot(x, y, color='blue')
plt.title('Normal Distribution with Mean 50 and Standard Deviation 10')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.grid(True)
plt.show()
